
#ifndef __HAL_MEDIA_FREQ_H__
#define __HAL_MEDIA_FREQ_H__

#include "hi_type.h"
#include "hal_pm_reg.h"
#include "pm_ext.h"
#include "hi_comm_pm.h"

#define MEDIA_PM_LEVEL_NUM 14

typedef enum {
    VI_F214M = 0,
    VI_F300M,
    VI_F340M,
    VI_F396M,
    VI_F500M,
    VI_F600M,

} hi_vi_freq;

typedef enum {
    PIPEBE_F214M = 0,
    PIPEBE_F300M,
    PIPEBE_F340M,
    PIPEBE_FVI,

} hi_pipebe_freq;

typedef enum {
    VPSS_F214M = 0,
    VPSS_F300M,
    VPSS_F396M,

} hi_vpss_freq;

typedef enum {
    VEDU_F396M = 0,
    VEDU_F500M,
    VEDU_F594M,

} hi_vedu_freq;

typedef enum {
    VDH_F396M = 0,
    VDH_F500M,
    VDH_F594M,
} hi_vdh_freq;


typedef enum {
    JPGE_F400M = 0,

} hi_jpge_freq;

typedef enum {
    VDP_F198M = 0,
    VDP_F300M,

} hi_vdp_freq;

typedef enum {
    VGS_F300M = 0,
    VGS_F396M,
    VGS_F500M,

} hi_vgs_freq;

typedef enum {
    GDC_F340M = 0,
    GDC_F400M,
    GDC_F475M,

} hi_gdc_freq;

typedef enum {
    AVSP_F300M = 0,

} hi_avsp_freq;

typedef enum {
    TDE_F150M = 0,

} hi_tde_freq;

typedef enum {
    AIAO_F1188M = 0,
    AIAO_F1500M,

} hi_aiao_freq;


typedef struct {
    hi_vi_freq          vi[VI_MAX_DEV_NUM];
    hi_pipebe_freq   pipe_be;
    hi_vpss_freq      vpss;
    hi_vedu_freq      vedu;
    hi_vdh_freq        vdh;
    hi_jpge_freq       jpge;
    hi_vdp_freq        vdp;
    hi_vgs_freq        vgs;
    hi_gdc_freq       gdc;
    hi_tde_freq        tde;
    hi_avsp_freq      avsp;
    hi_aiao_freq      aiao;
} hi_media_freq;


typedef enum {
    VI,
    BE,
    VPSS,
    VEDU,
    VDH,
    JPGE,
    VDP,
    GDC,
    VGS,
    TDE,
    AVSP,
    AIAO,
} hi_media_module;

typedef enum {
    MPP_EN_PM_ILLEGAL_PARAM = 0X40,
    MPP_EN_PM_NULL_PTR = 0X41,
    MPP_EN_PM_OVERRANGE = 0x42,
    MPP_EN_PM_SET_DVFS = 0x43,
} pm_err_code;


hi_s32 set_media_freq_reg(const hi_media_freq *media_freq);

hi_s32 get_media_freq_reg(hi_media_freq  *media_freq);

hi_s32 pm_hal_get_media_freq_by_usr_cfg(const hi_mpi_pm_media_cfg *pm_param, hi_media_freq *media_freq);

hi_s32 pm_hal_get_misc_policy(void);

void pm_hal_get_media_profile(hi_media_freq *media_freq, hi_u32  *profile);

hi_s32 pm_hal_get_media_profile_by_usr_cfg(hi_mpi_pm_media_cfg *usr_param, hi_u32  *profile);

hi_s32 pm_hal_set_media_freq_by_usr_cfg(const hi_mpi_pm_media_cfg *usr_param);


#endif /*#ifndef __HAL_MEDIA_FREQ_H__*/


